/*
 * This file is part of aion-engine <aion-engine.com>
 *
 * aion-engine is private software: you can redistribute it and or modify
 * it under the terms of the GNU Lesser Public License as published by
 * the Private Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * aion-engine is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser Public License for more details.
 *
 * You should have received a copy of the GNU Lesser Public License
 * along with aion-engine.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.aionengine.gameserver.model;

import javax.xml.bind.annotation.XmlEnum;

@XmlEnum
public enum TribeClass {
    ABDARK_AABDRAGON,
    ABDRAGON_AABDARK,
    ABYSSDRAKANGATE,
    AGGRESSIVE_ALL,
    AGGRESSIVE_DARK,
    AGGRESSIVE_DARK_HSPECTRE,
    AGGRESSIVE_DRAGON,
    AGGRESSIVE_LIGHT,
    AGGRESSIVE_LIGHT_HSPECTRE,
    AGGRESSIVE1_AAGGRESSIVE2,
    AGGRESSIVE2_AAGGRESSIVE1,
    AGGRESSIVEESCORT,
    AGGRESSIVEMONSTER,
    AGGRESSIVESINGLEMONSTER,
    AGGRESSIVESUPPORTMONSTER,
    AGGRESSIVESUPPORTMONSTER2,
    AGGRESSIVETOIDELIM,
    AGGRESSIVETOPCPET,
    AGGRESSIVETOSHULACK,
    AGGRESSIVETOSHULACK2,
    AGRESSIVETOMONSTER,
    AGRRESSIVEFRIENDLYVRITRA,
    AGRRESSIVEFRIENDLYVRITRA2,
    AGRRESSIVEVRITRAANDPC,
    AHELLHOUND,
    AIREL1,
    AIREL2,
    AIREL3,
    AIRELBOSS,
    ANTI_CRYSTAL,
    APRETOR,
    ARCHERYBASFELT_ATARGETBASFELT_DF1,
    ARCHERYBASFELT_ATARGETBASFELT_LF1,
    ARCHERYBASFELT2_ATARGETBASFELT2_DF1,
    ARCHERYBASFELT2_ATARGETBASFELT2_LF1,
    ASIST_D(true),
    ATAURIC,
    ATKDRAKAN,
    BAT_FAMILY_ELITE,
    BMDGUARDIAN,
    BMLGUARDIAN,
    BOMB_LIZARDMAN,
    BRAX,
    BROHUM,
    BROWNIE,
    BROWNIECOWARD,
    BROWNIEFELLER_HZAIF_LF1,
    BROWNIEGUARD,
    CALYDON,
    CALYDON_POLYMORPH,
    CHERUBIM2ND,
    CHILDMONSTER,
    CYCLOPSBOSS,
    CONSIADE,
    CONSIADE_SUM,
    CRESTLICH,
    CRYSTAL,
    CRYSTAL_NMDD,
    CRYSTAL_SUM,
    D1_HKERUBIM_LF1,
    DARK_LICH,
    DARK_MOB,
    DARK_NPC,
    DARK_SUR_MOB,
    DARU,
    DARU_HZAIF,
    DECOY,
    DECOY_HUNGER,
    DRAGGMOB_ADRGUARD1,
    DRAGON,
    DRAGON_CTRL,
    DRAGON_SLAVE,
    DRAKAN_DGUARD,
    DRAKAN_LGUARD,
    DRAKANDF3BOSS,
    DRAKANDF3SLAVE,
    DRAKANDOOR,
    DRAKANPOLYMORPH,
    DRAKEPURPLE_MASTER,
    DRAKEPURPLE_SLAVE,
    DRAKY_BOMB_EX,
    DRAKY_BOMB_MASTER,
    DRAMA_EVE_NONPC_A,
    DRAMA_EVE_NONPC_B,
    DRAMA_EVE_NONPC_DARKA,
    DRAMA_EVE_NONPC_DARKB,
    DRAMA_KIMEIA_DARKNPC,
    DRAMA_KIMEIA_MOB,
    DRAMA_KIMEIA_NPC,
    DRAMATA,
    DRAMATATIMERA,
    DRAMATATIMERB,
    DUMMY,
    DUMMY_DGUARD(Race.ASMODIANS),
    DUMMY_LGUARD(Race.ELYOS),
    DUMMY2,
    DUMMY2_DGUARD(Race.ASMODIANS),
    DUMMY2_LGUARD(Race.ELYOS),
    ELEMENTAL_AIR,
    ELEMENTAL_EARTH,
    ELEMENTAL_FIRE,
    ELEMENTAL_LIGHT,
    ELEMENTAL_WATER,
    ENEMY_AGUARD_DARK,
    ESCORT,
    ETTIN,
    F4GUARD_DARK(Race.ASMODIANS),
    F4GUARD_DRAGON(Race.DRAGON),
    F4GUARD_LIGHT(Race.ELYOS),
    F4RAID,
    FANATIC,
    FARMER_HKERUBIM_LF1,
    FETHLOT,
    FIELD_OBJECT_ALL,
    FIELD_OBJECT_ALL_HOSTILEMONSTER,
    FIELD_OBJECT_ALL_MONSTER,
    FIELD_OBJECT_DARK(true),
    FIELD_OBJECT_LIGHT(true),
    FIREEL1,
    FIREEL2,
    FIREEL3,
    FIREELBOSS,
    FIREFUNGY,
    FIRETEMPLE_MOB,
    FRIENDLYTOIDELIM,
    FRILLFAIMAMBABY,
    FRILLFAIMAMCOUPLE,
    FRILLFAIMAMMOM,
    FUNGY,
    FUNGUS,
    GARGOYLE,
    GARGOYLE_ELITE,
    GENERAL(true),
    GENERAL_ADADR,
    GENERAL_DARK(true),
    GENERAL_DARK_IDLDF4A_INTRO,
    GENERAL_DARK_LYCAN,
    GENERAL_DRAGON(true),
    GENERAL_IDLDF4A_INTRO,
    GENERAL_KRALL,
    GENERAL_LDF4A_PUBLIC_YUN,
    GENERALDA_ALIDR,
    GENERALDR_ALIDA,
    GENERALDR_ALIDA_SUPPORT,
    GHOSTDARK,
    GHOSTLIGHT,
    GHTIMER,
    GMASTER,
    GOBLIN,
    GOD_KAISINEL,
    GOD_MARCHUTAN,
    GOLEM_SWITCH,
    GRIFFO,
    GRIFFON,
    GSLAVE,
    GUARD(Race.ELYOS, true),
    GUARD_D1NOATTACK,
    GUARD_DARK(Race.ASMODIANS, true),
    GUARD_DARK_ALYCANARATMAN_DF1(Race.ASMODIANS),
    GUARD_DARKAENEMY(Race.ASMODIANS),
    GUARD_DARKMA(Race.ASMODIANS),
    GUARD_DRAGON(Race.DRAGON, true),
    GUARD_DRAGONMA(Race.DRAGON),
    GUARD_FTARGETBASFELT_DF1,
    GUARD_FTARGETBASFELT_LF1,
    GUARD_LIGHT_AKERUBIM_LF1(Race.ELYOS),
    GUARD_LIGHTMA(Race.ELYOS),
    GUARDDARK_ALEHPAR(Race.ASMODIANS),
    GUARDIAN,
    GURURU_D1,
    GURURU_DECO,
    HIPPOLIZARD,
    HOLYSERVANT,
    HOLYSERVANT_DEBUFFER,
    HOLYSERVANT_DESPAWN,
    HOSTILE_ALL,
    HOSTILEONLYMONSTER,
    IDASTERIA_IU_ATK,
    IDASTERIA_IU_MONSTER,
    IDASTERIA_IU_MONSTER2,
    IDASTERIA_IU_NPC,
    IDASTERIA_IU_POLYMORPHD,
    IDASTERIA_IU_POLYMORPHL,
    IDASTERIA_IU_WORLD_MONSTER,
    IDASTERIA_IU_WORLD_MONSTER2,
    IDASTERIA_IU_WORLD_NPC,
    IDASTERIA_IU_WORLD_POLYMORPHD,
    IDASTERIA_IU_WORLD_POLYMORPHL,
    IDCATACOMBS_DRAKE,
    IDCATACOMBS_DRAKE_SUM,
    IDCATACOMBS_TAROS,
    IDELEMENTAL2HEALSUM,
    IDELIM,
    IDELIM_FRIEND,
    IDEVENT01_MC,
    IDEVENT01_POLYMORPHD,
    IDEVENT01_POLYMORPHL,
    IDEVENT01_SUMMON,
    IDEVENT01_TOWER,
    IDF5_R2_CANNON,
    IDF5_R2_CANNON_ATTACK,
    IDF5_R2_SYNC1,
    IDF5_R2_SYNC1_ATTACK,
    IDF5_R2_SYNC2,
    IDF5_R2_SYNC2_ATTACK,
    IDF5_R2_SYNC3,
    IDF5_R2_SYNC3_ATTACK,
    IDF5_SIEGEWEAPON,
    IDF5_SIEGEWEAPON_ATTACK,
    IDF5_TD_ASSULT,
    IDF5_TD_BOMBER,
    IDF5_TD_COMMANDER_DA,
    IDF5_TD_COMMANDER_LI,
    IDF5_TD_DOOR,
    IDF5_TD_GUARD_DARK,
    IDF5_TD_GUARD_LIGHT,
    IDF5_TD_SIEGE,
    IDF5_TD_WEAPON_PC,
    IDF5_TD_WEAPON_PC_DARK,
    IDF5_U1_WAR_01_GUARD,
    IDF5_U1_WAR_01_GUARD_DARK,
    IDF5_U1_WAR_01_REWARD,
    IDF5U1_AGGRESSIVETANK,
    IDF5U1_PCFLAG,
    IDF5U1_TANK,
    IDF5U1_VRITRA,
    IDF5U1_VRITRAFLAG,
    IDF5U1_VRITRATRAP,
    IDF5U1_VRITRAWEAPON,
    IDF5U2_ARROWTRAP,
    IDF5U2_FOBJ,
    IDF5U2_GUARD,
    IDF5U2_GUARD_DARK,
    IDF5U2_SHULACK,
    IDF5U2_SHULACK_ESCORT,
    IDF5U2_SHULACK_SLAVE,
    IDF5U2_VRITRA,
    IDF5U2_VRITRATRAP,
    IDYUN_ANCIENT,
    IDYUN_ANTIBOMBER,
    IDYUN_BOMBER,
    IDYUN_D1,
    IDYUN_DOOR,
    IDYUN_FIST,
    IDYUN_HDRAKAN,
    IDYUN_MEROPS,
    IDYUN_OBJECTS,
    IDYUN_ODRAKAN,
    IDYUN_POLYMORPH,
    IDYUN_RDRAKAN,
    IDYUN_SIEGEWEAPON,
    IDYUN_TARGET,
    IDYUN_VASARTI,
    IDYUN_XDRAKAN,
    IDKAMAR_CANNON,
    IDKAMAR_PROTECTGUARD_DARK,
    IDKAMAR_PROTECTGUARD_LIGHT,
    IDKAMAR_SIEGEWEAPON_ATTACK,
    IDKAMAR_SIEGEWEAPON_DARK,
    IDKAMAR_SIEGEWEAPON_LIGHT,
    IDKAMAR_VRITRA,
    IDLDF4A_DECOY,
    IDLDF5_UNDER_RUNE,
    IDLDF5RE_SOLO_Q,
    IDLF1_MONSTER,
    IDRAKSHA_DRAGONTOOTH,
    IDRAKSHA_DRAKAN,
    IDRAKSHA_NORMAL,
    IDRAKSHA_RAKSHA,
    IDRUNEWP_AGGRESSIVEANCIENTARM,
    IDRUNEWP_ANCIENTARM,
    IDRUNEWP_ESCORT,
    IDRUNEWP_RUNEDEVICE,
    IDRUNEWP_VRITRA,
    IDRUNEWP_VRITRADEVICE,
    IDTEMPLE_BUGS,
    IDTEMPLE_STONE,
    IDTIAMAT_ANCIENT,
    IDTIAMAT_AREAHIDE,
    IDTIAMAT_SPAWNHEAL,
    IDTIAMAT_XDRAKAN,
    IDVRITRA_BASE_REBIRTH,
    KAHRUN,
    KALNIF_AMINX,
    KALNIF_ATOG,
    KERUBIM_AD1_LF1,
    KERUBIM_AFARMER_LF1,
    KRALL,
    KRALL_PC,
    KRALL_TRAINING,
    KRALLMASTER,
    KRALLWIZARDCY,
    L_DRGUARD_ADRAGGMOB1,
    LASBERG,
    LDF_V_CHIEF_D,
    LDF_V_CHIEF_L,
    LDF_V_GUARD_DARK,
    LDF_V_GUARD_LIGHT,
    LDF_V_KILLER_KRALL,
    LDF_V_KILLER_LEHPAR,
    LDF_V_KILLER_LYCAN,
    LDF4A_CALYDON,
    LDF4A_YUN_GUARD,
    LDF4A_LG_SKILL,
    LDF4A_LG_SKILL_RECEIVE,
    LDF4A_NEPILIM,
    LDF4A_NEPILIM_SUMMON,
    LDF4A_OWLLAU,
    LDF4A_POLY_SHULACK,
    LDF4A_PUBLIC_MONSTER,
    LDF4A_SANDWARM,
    LDF4B_AGGRESSIVEYUNSOLDIER,
    LDF4B_ATTACKWAGON,
    LDF4B_FANATIC,
    LDF4B_MINE,
    LDF4B_SPARRING_DGUARD,
    LDF4B_SPARRING_DGUARD2,
    LDF4B_SPARRING_GUARD,
    LDF4B_SPARRING_GUARD2,
    LDF4B_SPARRING_Y,
    LDF4B_SPARRING_Y2,
    LDF4B_WAGON,
    LDF5_BABARIAN,
    LDF5_BRAX,
    LDF5_CALYDON,
    LDF5_DARU,
    LDF5_DEBRIE,
    LDF5_FUNGY,
    LDF5_GURURU,
    LDF5_LUPYLLINI,
    LDF5_MUTA,
    LDF5_NATIVE_DIRECT,
    LDF5_NEUT,
    LDF5_OWLLAU,
    LDF5_SHULACK_DIRECT,
    LDF5_SHULACK_KEEPER,
    LDF5_SPAKLE,
    LDF5_V_CHIEF_D,
    LDF5_V_CHIEF_DR,
    LDF5_V_CHIEF_L,
    LDF5_V_KILLER_D,
    LDF5_V_KILLER_DR,
    LDF5_V_KILLER_L,
    LDF5_VESPA,
    LDF5_WORKER,
    LDF5B_DOOR_DA,
    LDF5B_DOOR_DR,
    LDF5B_DOOR_LI,
    LDF5B_FOBJ_HOSTILEPC,
    LDF5B_KILLER,
    LDF5B_OUT_DOOR_KILLER_DA,
    LDF5B_OUT_DOOR_KILLER_LI,
    LEHPAR,
    LEHPAR_AGUARDDARK,
    LEHPAR_APRETOR,
    LICH_SOULEDSTONE,
    LIGHT_DENLABIS,
    LIGHT_LICH,
    LIGHT_LICH_DF2ADIRECTPORTAL,
    LIGHT_MOB,
    LIGHT_NPC,
    LIGHT_SUR_MOB,
    LIGHT_SUR_MOB_DF2ADIRECTPORTAL,
    LIZARDMAN,
    LIZARDMAN_BOMB,
    LIZARDMAN_KB,
    LYCAN,
    LYCAN_AGUARD_DARK_DF1,
    LYCAN_HUNTER,
    LYCAN_MAGE,
    LYCAN_PC,
    LYCAN_PET,
    LYCAN_PET_TRAINING,
    LYCAN_SUM,
    LYCAN_TRAINING,
    LYCANDF2MASTER,
    LYCANDF2SLAVE1,
    LYCANDF2SLAVE2,
    LYCANMASTER,
    LUPYLLINI,
    MAIDENGOLEM_ELITE,
    MANDURITWEAK,
    MERDION,
    MINX,
    MINX_HKALNIF,
    MINX_HZAIF,
    MONSTER(true),
    MONSTER_FRIENDLY_LDFCHIEF,
    MONSTER_LDF4A_PUBLIC_LIZARDMAN,
    MOSBEARBABY,
    MOSBEARFATHER,
    MUTA,
    MUTA_HOCTASIDE,
    NEUT,
    NEUTBUG,
    NEUTQUEEN,
    NEUTRAL_DGUARD,
    NEUTRAL_GUARD,
    NEUTRAL_GUARD_ON_ATTACK,
    NEUTRAL_GUARD_ON_ATTACK01,
    NEUTRAL_LGUARD,
    NLIZARDMAN,
    NLIZARDMAN2,
    NLIZARDPET,
    NLIZARDPRIEST,
    NLIZARDRAISER,
    NNAGA,
    NNAGA_BOSS_SERVANT,
    NNAGA_ELEMENTAL,
    NNAGA_ELEMENTALIST,
    NNAGA_PRIEST,
    NNAGA_PRIESTBOSS,
    NNAGA_SERVANT,
    NOFIGHT,
    NONAGRRESSIVEFRIENDLYVRITRA,
    NONE(true),
    NPC(true),
    OCTASIDE_AMUTA,
    OCTASIDEBABY,
    ORC,
    PARENTSMONSTER,
    PC(true),
    PC_DARK(true),
    PC_DRAGON(true),
    PET,
    PET_DARK,
    POLYMORPHFUNGY,
    POLYMORPHPARROT,
    PREDATOR,
    PREY,
    PRETOR_ALEHPAR,
    PROTECTGUARD_DARK(Race.ASMODIANS),
    PROTECTGUARD_DARK_SIEGEWEAPON,
    PROTECTGUARD_LIGHT(Race.ELYOS),
    PROTECTGUARD_LIGHT_SIEGEWEAPON,
    QUESTGUARD_DARK,
    QUESTGUARD_LIGHT,
    RANMARK,
    RATMAN,
    RATMAN_AGUARD_DARK_DF1,
    RATMANDFWORKER,
    RATMANWORKER,
    ROBBERALDER_ASPRIGG_DF1,
    SAM_ELITE,
    SAMM,
    SEIREN,
    SEIREN_MASTER,
    SEIREN_SNAKE,
    SHELLIZARDBABY,
    SHELLIZARDMOM,
    SHULACK,
    SHULACK_ATTACKED,
    SHULACK_ATTACKING,
    SHULACK_DECK,
    SHULACK_DECK_KILLER,
    SHULACK_SLAVE,
    SHULACK_SLAVE_NOTAGGRESSIVE,
    SHULACK_SUPPORT,
    SOULEDSTONE,
    SOULEDSTONE_MINI,
    SPAKY,
    SPALLER,
    SPALLERCTRL,
    SPECTRE_AALIGHTDARK,
    SPRIGG_HROBBERALDER_DF1,
    SPRIGGREFUSE_DF1,
    SUCCUBUS_ELITE,
    SWELLFISH,
    TARGETBASFELT_DF1,
    TARGETBASFELT2_DF1,
    TAURIC,
    TDOWN_DRAKAN,
    TEST_ATTACKTONPC,
    TEST_ATTACKTOPC,
    TEST_ATTACKTOPC_DARK,
    TEST_DARK_ADRAGON,
    TEST_DARK_AETC,
    TEST_DARK_ALIGHT,
    TEST_DRAGON_ADARK,
    TEST_DRAGON_AETC,
    TEST_DRAGON_ALIGHT,
    TEST_DRAKAN,
    TEST_ETC_ADARK,
    TEST_ETC_ADRAGON,
    TEST_ETC_ALIGHT,
    TEST_LIGHT_ADARK,
    TEST_LIGHT_ADRAGON,
    TEST_LIGHT_AETC,
    TEST_SUPPORTNPC,
    TESTBATTLE_NPC,
    TIAMAT,
    TIAMATREMNANT_DRAKAN,
    TIAMATREMNANT_LIZARD,
    TIAMATREMNANT_LIZARD_INJURY,
    TIGRAN,
    TOG,
    TOG_AKALNIF,
    TOG_AZAIF,
    TOWERMAN,
    TRICO,
    TRICON,
    UNDEADGRADIATOR_DF1,
    UNDER_01_WAR_VRITRA,
    USEALL(true),
    USEALL_HOSTILEPC,
    USEALL_LDF5_TOWER_DA,
    USEALL_LDF5_TOWER_LI,
    USEALL_TELEPORTER_DA,
    USEALL_TELEPORTER_LI,
    USEALLNONETOMONSTER,
    VRITRA,
    VRITRASUPPORT,
    VRITRATANK,
    WAVE_SWARM1,
    WAVE_SWARM2,
    WAVE_TREE,
    XDRAKAN,
    XDRAKAN_DGUARD,
    XDRAKAN_ELEMENTALIST,
    XDRAKAN_LGUARD,
    XDRAKAN_PET,
    XDRAKAN_PRIEST,
    XDRAKAN_SERVANT,
    XDRAKAN_UNATTACK,
    XIPETO,
    XIPETOBABY,
    YDUMMY,
    YDUMMY_DGUARD,
    YDUMMY_GUARD,
    YDUMMY_LGUARD,
    YDUMMY2,
    YDUMMY2_DGUARD,
    YDUMMY2_GUARD,
    YDUMMY2_LGUARD,
    YUN_GUARD,
    ZAIF,
    ZAIF_ABROWNIEFELLER_LF1,
    ZAIF_ADARU,
    ZAIF_AMINX,
    ZAIF_ATOG;

    private Race guardRace;
    private boolean isBasic;
    private boolean isUsed = true;

    private TribeClass() {
    }

    private TribeClass(Race guardRace) {
        this.guardRace = guardRace;
    }

    private TribeClass(Race guardRace, boolean isBasic) {
        this.guardRace = guardRace;
        this.isBasic = isBasic;
    }

    private TribeClass(boolean isBasic) {
        this.isBasic = isBasic;
    }

    public boolean isGuard() {
        return guardRace != null;
    }

    public boolean isBasicClass() {
        return isBasic;
    }

    public boolean isLightGuard() {
        return guardRace == Race.ELYOS;
    }

    public boolean isDarkGuard() {
        return guardRace == Race.ASMODIANS;
    }

    public boolean isDrakanGuard() {
        return guardRace == Race.DRAGON;
    }

    public boolean isPC() {
        return this == TribeClass.PC || this == TribeClass.PC_DARK;
    }

    /**
     * @return true if tribe is used for any npc
     */
    public boolean isUsed() {
        return isUsed;
    }

    public void setUsed(boolean isUsed) {
        this.isUsed = isUsed;
    }
}
